/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package restaurante.cdp;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToOne;
import restaurante.cdp.enuns.SituacaoCliente;
import restaurante.cdp.enuns.TipoPedido;
import restaurante.cdp.interfaces.EnviadorPedido;
import restaurante.cdp.interfaces.Pedinte;
import restaurante.cdp.interfaces.ResponsavelPagamento;
import restaurante.util.persistencia.ObjetoPersistente;


/**
 *
 * @author a20101bsi0623
 */

@Entity
public class ClienteDomiciliar extends ObjetoPersistente implements Pedinte{
    private String nome;
    private Long cpf;
    private SituacaoCliente situacao;
    private Endereco endereco;
    private Pedido pedido;
    
    public ClienteDomiciliar()
    {
        situacao = SituacaoCliente.NORMAL;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Long getCpf() {
        return cpf;
    }

    public void setCpf(Long cpf) {
        this.cpf = cpf;
    }

    @Enumerated(EnumType.STRING)
    public SituacaoCliente getSituacao() {
        return situacao;
    }

    public void setSituacao(SituacaoCliente situacao) {
        this.situacao = situacao;
    }

    @OneToOne
    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    @OneToOne
    public Pedido getPedido() {
        return pedido;
    }

    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }
    
    
    
    @Override
    public Pedido pedir(EnviadorPedido responsavel, Produto produto, Integer qte) {
        System.out.println("\nCliente: Fez o pedido");
        Pedido p = new Pedido();
        p.setProduto(produto);
        p.setQuantidade(qte);
        p.setResponsavel(responsavel);
        p.setTipo(TipoPedido.ENTREGA);
        this.setSituacao(SituacaoCliente.ESPERANDO);
        p.setCliente(this);
        
        return p;
    }

    @Override
    public Pagamento pagar(ResponsavelPagamento responsavel) {
        System.out.println("\nCliente: Efetuou o Pagamento");
        List<Pedido> p = new ArrayList();
        Pagamento pg = new Pagamento();
        pg.setResponsavel(responsavel);
        pg.setCliente(this);
        p.add(pedido);
        pg.setPedidos(p);
        for(int i=0; i<pedido.getQuantidade();i++)
        {
            pg.setTotal(pg.getTotal() + pedido.getProduto().getValor());
        }
        situacao = SituacaoCliente.NORMAL;
        responsavel.receberPagamento();
        responsavel.computarPagamento();
        return pg;
    }

    @Override
    public void consultaCliente() {
        System.out.println("\n--Cliente Domiciliar--\n>Nome: "+this.getNome()+"\n>Situacao: "+this.getSituacao());
    }

    @Override
    public void setSituacao(Pedido p) {

    }


    
}
